package collection;


import java.util.Iterator;
import java.util.LinkedList;

/**
 * 双向链表的增删改查
 */
public class LinkedListCRUD {

    public static void main(String[] args) {

        LinkedList linkedList = new LinkedList();
        linkedList.add(1);
        linkedList.add(2);
        linkedList.add(3);
        System.out.println("linkedList=" + linkedList);

        //删除结点
        //linkedList.remove();//默认删除第一个节点
        linkedList.remove(2);//删除第三个节点
        System.out.println("linkedList=" + linkedList);

        //修改结点
        linkedList.set(1, 999);
        System.out.println("linkedList=" + linkedList);

        //得到某个结点对象
        //get(1) 是得到双向链表的第二个对象
        Object o = linkedList.get(1);
        System.out.println(o);//999

        //因为 LinkedList 实现了 List接口，遍历方式也有3种
        System.out.println("===LinkeList 遍历迭代器====");
        Iterator iterator = linkedList.iterator();
        while (iterator.hasNext()) {
            Object next = iterator.next();
            System.out.println("next=" + next);
        }

        System.out.println("===LinkeList 遍历增强 for====");
        for (Object o1 : linkedList) {
            System.out.println("o1=" + o1);
        }
        System.out.println("===LinkeList 遍历普通 for====");
        for (int i = 0; i < linkedList.size(); i++) {
            System.out.println(linkedList.get(i));
        }

        /*
            ArrayList 和 LinkedList 比较
                            底层结构        增删的效率           改查效率
            ArrayList       可变数组        较低，数组扩容        较高
            LinkedList      双向链表        较高，链表追加        较低

            1)改查操作多，选 ArrayList
            2)增删操作多，选 LinkedList
            3)一般来说，查询操作多于增删操作，所以大部分情况下选择ArrayList
         */
    }
}
